home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / h_logl11 / h_log.asm next >
Assembly Source File  |  1991-10-18  |  3KB  |  193 lines

  1.  
  2.     ASSUME    CS:CODE,DS:CODE,SS:STACK
  3.  
  4. CODE    SEGMENT    DWORD 'CODE'
  5.  
  6. DOT_Y    EQU    87H
  7. LEN    EQU    128H
  8. PROG    EQU    14000H-LEN
  9.  
  10. TBIOS:
  11.  
  12. EGB_init:
  13.     PUSH    DWORD PTR 0
  14.     PUSHAD
  15.     CLD
  16.     MOV    AX,2CH
  17.     MOV    DS,AX
  18.     MOV    ES,AX
  19.     MOV    AL,0
  20.     XOR    EDI,EDI
  21.     MOV    ECX,-1
  22. ENV:    REPNZ    SCASB
  23.     CMP    [EDI],AL
  24.     JNZ    SHORT ENV
  25.     ADD    EDI,2
  26. CNVRT:    INC    EDI
  27.     MOV    AL,[EDI]
  28.     CMP    AL,'a'
  29.     JC    SHORT KOMOJI
  30.     CMP    AL,'z'+1
  31.     JNC    SHORT KOMOJI
  32.     SUB    AL,20H
  33.     MOV    [EDI],AL
  34. KOMOJI:    TEST    AL,AL
  35.     JNZ    SHORT CNVRT
  36.     CMP    DWORD PTR [EDI-12],'H'+'_'*100H+'V'*10000H+'2'*1000000H
  37.     JNZ    SHORT EXIT3
  38.     CMP    DWORD PTR [EDI-08],'1'+'L'*100H+'1'*10000H+'1'*1000000H
  39.     JNZ    SHORT EXIT3
  40.     CMP    DWORD PTR [EDI-04],'.'+'E'*100H+'X'*10000H+'P'*1000000H
  41.     JNZ    SHORT EXIT3
  42.     OR    AL,[EDI-13]
  43.     JZ    SHORT FILEOK
  44.     CMP    AL,':'
  45.     JZ    SHORT FILEOK
  46.     CMP    AL,'\'
  47.     JNZ    SHORT EXIT3
  48. FILEOK:    MOV    AL,24H
  49.     MOV    DS,AX
  50.     MOV    ES,AX
  51.     MOV    EDI,81H
  52.     MOVZX    ECX,BYTE PTR [EDI-1]
  53.     MOV    AL,' '
  54.     REPZ    SCASB            ; パラメータ1の前のスペーススキップ
  55.     JZ    SHORT EXIT3
  56.     REPNZ    SCASB            ; パラメータ1スキップ
  57.     JNZ    SHORT EXIT3
  58.     REPZ    SCASB            ; パラメータ2の前のスペーススキップ
  59.     JZ    SHORT EXIT3
  60.     LEA    EDX,[EDI-1]
  61.     REPNZ    SCASB            ; パラメータ2スキップ
  62.     XOR    ECX,ECX
  63.     MOV    BYTE PTR [EDI-1],CL    ; パラメータ2の末尾を0にする
  64.     CMP    BYTE PTR [EDX],'+'
  65.     JNZ    SHORT OVRWRT
  66.     INC    EDX
  67.     MOV    AX,3D02H        ; ファイルのオープン
  68.     INT    21H
  69.     JC    SHORT OVRWRT
  70.     MOV    EBX,EAX
  71.     XOR    EDX,EDX
  72.     MOV    AX,4202H        ; ファイルのシーク
  73.     INT    21H
  74.     MOV    EAX,EBX
  75.     JMP    SHORT EXIT4
  76. OVRWRT:    MOV    AH,3CH            ; オーバーライトモード
  77.     INT    21H
  78.     JNC    SHORT EXIT4
  79. EXIT3:    XOR    EAX,EAX
  80. EXIT4:    MOV    CX,118H
  81.     MOV    DS,CX
  82.     MOV    [HANDLE+PROG],AX
  83.     POPAD
  84.     RET
  85.  
  86.     ALIGN    4
  87.  
  88. EGB_sjisString:    
  89.     PUSH    DWORD PTR 0
  90.     CMP    WORD PTR [ESI+2],DOT_Y
  91.     JNZ    SHORT EXIT2
  92.     PUSH    ESI
  93.     ADD    ESI,4
  94. COMMON:    MOV    BX,FS:[HANDLE+PROG]
  95.     TEST    BX,BX
  96.     JZ    SHORT EXIT1
  97.     LODSW
  98.     MOVZX    ECX,AX
  99.     TEST    ECX,ECX
  100.     JZ    SHORT EXIT1
  101.     PUSH    DS
  102.     MOV    EDX,ESI
  103.     MOV    AH,40H
  104.     INT    21H
  105.     JC    SHORT EXIT5
  106.     CMP    EAX,ECX
  107.     JNZ    SHORT EXIT5
  108.     MOV    AX,118H
  109.     MOV    DS,AX
  110.     MOV    CL,2
  111.     MOV    EDX,OFFSET CRLF+PROG
  112.     MOV    AH,40H
  113.     INT    21H
  114.     JC    SHORT EXIT5
  115.     CMP    EAX,ECX
  116.     JZ    SHORT EXIT6
  117. EXIT5:    MOV    [HANDLE+PROG],0
  118. EXIT6:    POP    DS
  119. EXIT1:    POP    ESI
  120. EXIT2:    RET
  121.  
  122.     ALIGN    4
  123.  
  124. EGB_connectSjisString:
  125.     PUSH    DWORD PTR 0
  126.     CMP    WORD PTR GS:[EBP+344H+2],DOT_Y
  127.     JNZ    SHORT EXIT2
  128.     PUSH    ESI
  129.     JMP    SHORT COMMON
  130.  
  131. CRLF    DB    13,10
  132. HANDLE    DW    ?
  133.  
  134.     ALIGN    4
  135.  
  136. START:
  137.     ; TBIOS書き込みセグメント
  138.     MOV    AX,118H
  139.     MOV    ES,AX
  140.     CLD
  141.     ; TBIOS最後の必要エリアが0か調べる
  142.     MOV    EDI,PROG
  143.     XOR    EAX,EAX
  144.     MOV    ECX,LEN/4
  145.     REPZ    SCASD
  146.     JNZ    SHORT ERROR
  147.     ; コール先を探す
  148.     MOV    EBX,ES:[20H]
  149.     MOV    EAX,0BD14FF2EH    ; CALL CS:[EDI*4+????????]
  150.     MOV    ECX,100H
  151.     DEC    EBX
  152. SEARCH:    INC    EBX
  153.     CMP    ES:[EBX],EAX
  154.     LOOPNZ    SEARCH
  155.     JNZ    SHORT ERROR
  156.     MOV    EBX,ES:[EBX+4]
  157.     ; データの書換え EGB_init
  158.     MOV    EAX,OFFSET EGB_init+PROG
  159.     XCHG    EAX,ES:[EBX]
  160.     MOV    DWORD PTR [EGB_init+1],EAX
  161.     ; データの書換え EGB_sjisString
  162.     MOV    EAX,OFFSET EGB_sjisString+PROG
  163.     XCHG    EAX,ES:[EBX+60H*4]
  164.     MOV    DWORD PTR [EGB_sjisString+1],EAX
  165.     ; データの書換え EGB_connectSjisString
  166.     MOV    EAX,OFFSET EGB_connectSjisString+PROG
  167.     XCHG    EAX,ES:[EBX+61H*4]
  168.     MOV    DWORD PTR [EGB_connectSjisString+1],EAX
  169.     ; TBIOSへの転送
  170.     XOR    ESI,ESI
  171.     MOV    EDI,PROG
  172.     MOV    ECX,LEN/4
  173.     REP    MOVSD
  174.     ; 正常終了
  175.     MOV    AL,0
  176.     JMP    SHORT EXIT
  177.     ; 異常終了
  178. ERROR:    MOV    AL,1
  179. EXIT:    MOV    AH,4CH
  180.     INT    21H
  181.  
  182.     DB    '<<< H_LOG V1.2 by Yasu.Hara. >>>'
  183.  
  184. CODE    ENDS
  185.  
  186. STACK    SEGMENT DWORD STACK 'STACK'
  187.  
  188.     DB    1024 DUP(?)
  189.  
  190. STACK    ENDS
  191.  
  192.     END    START
  193.